import { JKManager } from "../JKManager";

const { ccclass, property } = cc._decorator;

/**
 * 多语言文本组件
 */
@ccclass
export class LocalizedLabel extends cc.Label {
    @property(cc.Integer)
    _horizontalAlign = null
    @property({
        type: cc.Label.HorizontalAlign,
        tooltip: CC_DEV && 'i18n:COMPONENT.label.horizontal_align',
        animatable: false,
        override: true,
    })
    //@ts-ignore
    get horizontalAlign() {
        return this._horizontalAlign === null ? cc.Label.HorizontalAlign.CENTER : this._horizontalAlign
    }
    set horizontalAlign(value) {
        if (this._horizontalAlign === value) return;
        this._horizontalAlign = value;
        (this as any).setVertsDirty();
    }
    @property(cc.Integer)
    _verticalAlign = null
    @property({
        type: cc.Label.VerticalAlign,
        tooltip: CC_DEV && 'i18n:COMPONENT.label.vertical_align',
        animatable: false,
        override: true,
    })
    //@ts-ignore
    get verticalAlign() {
        return this._verticalAlign === null ? cc.Label.HorizontalAlign.CENTER : this._verticalAlign
    }
    set verticalAlign(value) {
        if (this._verticalAlign === value) return;
        this._verticalAlign = value;
        (this as any).setVertsDirty();
    }

    @property(cc.String)
    _textKey: string = `Text Key`
    @property({
        multiline: true,
    })
    set textKey(value) {
        this._textKey = value
        this.string = JKManager.Language.getText(this._textKey, ...this._params) || this._textKey
    }
    get textKey() {
        return this._textKey
    }

    private _params: (number | string)[] = []

    onLoad() {
        // cc.log(`${cc.js.getClassName(this)} start`)

        this.refreshText(this.textKey, ...this._params)
    }

    //==============================================================================================================================
    //========================================================= 内部方法 ============================================================
    //==============================================================================================================================

    //==============================================================================================================================
    //========================================================= 外部方法 ============================================================
    //==============================================================================================================================

    /**
     * 刷新语言显示
     * @param params 参数
     */
    refreshText(textKey: string, ...params: (number | string)[]) {
        // cc.log(`${cc.js.getClassName(this)} refreshText`)

        this._params = params
        this.textKey = textKey
    }
}